package com.yuexunit.finance.project.action.v1;

import java.util.Date;

import com.yuexunit.finance.context.FinVersion1;
import com.yuexunit.finance.project.action.v1.model.input.PickupApplicationWarehouseInputCreateParams;
import com.yuexunit.finance.project.action.v1.model.input.PickupApplicationWarehouseInputUpdateParams;
import com.yuexunit.finance.project.action.v1.model.output.EnterpriseInvoiceInfo;
import com.yuexunit.finance.project.action.v1.model.output.PickupApplicationWarehouseDetail;
import com.yuexunit.page.PageCriteria;
import com.yuexunit.page.PageList;
import com.yuexunit.web.annotation.Action;
import com.yuexunit.web.annotation.Parameter;
import com.yuexunit.web.annotation.Permission;

/**
*@version 创建时间：2017年8月2日 下午1:39:41
*@author wenwenlong
*类说明
*/

public interface FinancePickupApplicationWarehouseApi {
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货创建")
	@Parameter(name = "pickupId", description = "提货ID")
	public String createFinancePickupApplicationWarehouse(
			PickupApplicationWarehouseInputCreateParams params
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货修改")
	public void updateFinancePickupApplicationWarehouse(
			PickupApplicationWarehouseInputUpdateParams params
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货提交")
	public void submitFinancePickupApplicationWarehouse(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货取消")
	public void cancelFinancePickupApplicationWarehouse(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);

	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货完成签署")
	public void finishPickupApplicationWarehouseClientSign(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "确认提货合同-单个文件")
	public void confirmWarehousePickupContract( 
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "fileUuid", description = "融资附件UUID") String fileUuid
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "批量确认提货合同")
	public void confirmWarehousePickupContractAll( 
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货详情")
	public PickupApplicationWarehouseDetail inquireFinancePickupApplicationWarehouse(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货解除监管")
	public void deregulationPickupApplicationWarehouse(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货列表")
	public PageList<PickupApplicationWarehouseDetail> inquireFinancePickupApplicationWarehousePageList(
			@Parameter(name = "pickupState", description = "提货状态", nullable = true) Integer[] pickupState,
			@Parameter(name = "pickupNumber", description = "提货单号", nullable = true) String pickupNumber,
			@Parameter(name = "creator", description = "创建人", nullable = true) String creator,
			@Parameter(name = "screatDt", description = "创建开始时间", nullable = true) Date screatDt,
			@Parameter(name = "ecreatDt", description = "创建截止时间", nullable = true) Date ecreatDt,
			@Parameter(name = "enterpriseId", description = "企业ID", nullable = true) Long enterpriseId,
			@Parameter(name = "buyer", description = "买家", nullable = true) String buyer,
			@Parameter(name = "spickupDt", description = "提货开始时间", nullable = true) Date spickupDt,
			@Parameter(name = "epickupDt", description = "提货截止时间", nullable = true) Date epickupDt,
			@Parameter(name = "financeNumber", description = "融资编号", nullable = true) String financeNumber,
			@Parameter(name = "productType", description = "业务类型", nullable = true) Integer productType,
			@Parameter(name = "isProvider", description = "是否供应商", nullable = true) Boolean isProvider,
			@Parameter(name = "bulkstockName", description = "货物名称", nullable = true) String bulkstockName,
			@Parameter(name = "financeId", description = "融资编号", nullable = true) Long financeId,
			@Parameter(name = "warehouseName", description = "仓库名", nullable = true) String warehouseName,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "代采代销提货列表")
	public PageList<PickupApplicationWarehouseDetail> inquireFinancePickupApplicationWarehousePageList1(
			@Parameter(name = "pickupState", description = "提货状态", nullable = true) Integer[] pickupState,
			@Parameter(name = "pickupNumber", description = "提货单号", nullable = true) String pickupNumber,
			@Parameter(name = "creator", description = "创建人", nullable = true) String creator,
			@Parameter(name = "screatDt", description = "创建开始时间", nullable = true) Date screatDt,
			@Parameter(name = "ecreatDt", description = "创建截止时间", nullable = true) Date ecreatDt,
			@Parameter(name = "enterpriseId", description = "企业ID", nullable = true) Long enterpriseId,
			@Parameter(name = "buyer", description = "买家", nullable = true) String buyer,
			@Parameter(name = "spickupDt", description = "提货开始时间", nullable = true) Date spickupDt,
			@Parameter(name = "epickupDt", description = "提货截止时间", nullable = true) Date epickupDt,
			@Parameter(name = "financeNumber", description = "融资编号", nullable = true) String financeNumber,
			@Parameter(name = "productType", description = "业务类型", nullable = true) Integer productType,
			@Parameter(name = "isProvider", description = "是否供应商", nullable = true) Boolean isProvider,
			@Parameter(name = "bulkstockName", description = "货物名称", nullable = true) String bulkstockName,
			@Parameter(name = "financeId", description = "融资编号", nullable = true) Long financeId,
			@Parameter(name = "warehouseName", description = "仓库名", nullable = true) String warehouseName,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);

	@Permission
	@Action(version = FinVersion1.class, description = "商务部审核保存")
	public PickupApplicationWarehouseDetail preservationBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState", description = "审核状态") Boolean auditState,
			@Parameter(name = "auditRemark", description = "审核意见 ", nullable = true) String auditRemark
	);
	@Permission
	@Action(version = FinVersion1.class, description = "商务部审核提交")
	public PickupApplicationWarehouseDetail submitBussinessAuditOpinions(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState", description = "审核状态") Boolean auditState,
			@Parameter(name = "auditRemark", description = "审核意见 ", nullable = true) String auditRemark
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "商务部领导审核保存")
	public PickupApplicationWarehouseDetail preservationLeaderBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState2", description = "审核状态") Boolean auditState2,
			@Parameter(name = "auditRemark2", description = "审核意见 ", nullable = true) String auditRemark2
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "商务部领导审核提交")
	public PickupApplicationWarehouseDetail submitLeaderBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState2", description = "审核状态") Boolean auditState2,
			@Parameter(name = "auditRemark2", description = "审核意见 ", nullable = true) String auditRemark2
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "运营审核保存")
	public PickupApplicationWarehouseDetail preservationOperateBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState3", description = "审核状态") Boolean auditState3,
			@Parameter(name = "auditRemark3", description = "审核意见 ", nullable = true) String auditRemark3
	);
	@Permission
	@Action(version = FinVersion1.class, description = "运营审核提交")
	public PickupApplicationWarehouseDetail submitOperateBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState3", description = "审核状态") Boolean auditState3,
			@Parameter(name = "auditRemark3", description = "审核意见 ", nullable = true) String auditRemark3
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "风控审核保存")
	public PickupApplicationWarehouseDetail preservationRiskBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState4", description = "审核状态") Boolean auditState4,
			@Parameter(name = "auditRemark4", description = "审核意见 ", nullable = true) String auditRemark4
	);
	@Permission
	@Action(version = FinVersion1.class, description = "风控审核提交")
	public PickupApplicationWarehouseDetail submitRiskBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState4", description = "审核状态") Boolean auditState4,
			@Parameter(name = "auditRemark4", description = "审核意见 ", nullable = true) String auditRemark4
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "风控领导审核保存")
	public PickupApplicationWarehouseDetail preservationRiskAdminBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState5", description = "审核状态") Boolean auditState5,
			@Parameter(name = "auditRemark5", description = "审核意见 ", nullable = true) String auditRemark5
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "风控领导审核提交")
	public PickupApplicationWarehouseDetail submitRiskAdminBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState5", description = "审核状态") Boolean auditState5,
			@Parameter(name = "auditRemark5", description = "审核意见 ", nullable = true) String auditRemark5
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "财务审核保存")
	public PickupApplicationWarehouseDetail preservationFinanceBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState6", description = "审核状态") Boolean auditState6,
			@Parameter(name = "auditRemark6", description = "审核意见 ", nullable = true) String auditRemark6
	);
	@Permission
	@Action(version = FinVersion1.class, description = "财务审核提交")
	public PickupApplicationWarehouseDetail submitFinanceBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState6", description = "审核状态") Boolean auditState6,
			@Parameter(name = "auditRemark6", description = "审核意见 ", nullable = true) String auditRemark6
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "财务领导审核保存")
	public PickupApplicationWarehouseDetail preservationFinanceAdminBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState7", description = "审核状态") Boolean auditState7,
			@Parameter(name = "auditRemark7", description = "审核意见 ", nullable = true) String auditRemark7
	);
	@Permission
	@Action(version = FinVersion1.class, description = "财务领导审核提交")
	public PickupApplicationWarehouseDetail submitFinanceAdminBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState7", description = "审核状态") Boolean auditState7,
			@Parameter(name = "auditRemark7", description = "审核意见 ", nullable = true) String auditRemark7
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "副总经理审核保存")
	public PickupApplicationWarehouseDetail preservationViceManagerBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState8", description = "审核状态") Boolean auditState8,
			@Parameter(name = "auditRemark8", description = "审核意见 ", nullable = true) String auditRemark8
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "副总理审核提交")
	public PickupApplicationWarehouseDetail submitViceManagerBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState8", description = "审核状态") Boolean auditState8,
			@Parameter(name = "auditRemark8", description = "审核意见 ", nullable = true) String auditRemark8
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "总经理审核保存")
	public PickupApplicationWarehouseDetail preservationManagerBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState9", description = "审核状态") Boolean auditState9,
			@Parameter(name = "auditRemark9", description = "审核意见 ", nullable = true) String auditRemark9
	);
	@Permission
	@Action(version = FinVersion1.class, description = "总经理审核提交")
	public PickupApplicationWarehouseDetail submitManagerBussinessAuditOpinion(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "auditState9", description = "审核状态") Boolean auditState9,
			@Parameter(name = "auditRemark9", description = "审核意见 ", nullable = true) String auditRemark9
	);
	@Permission
	@Action(version = FinVersion1.class, description = "创建提货合同信息-电子签章")
	public void createWarehousePickupContract(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "contractNumber", description = "合同序列号") String contractNumber,
			@Parameter(name = "contractDate", description = "签订日期") String contractDate,
			@Parameter(name = "send", description = "发货方") String send,
			@Parameter(name = "recieve", description = "收货方") String recieve,
			@Parameter(name = "normIds", description = "融资附件标准ID") Long[] normId,
			@Parameter(name = "filesUuid", description = "融资附件UUID") String[] filesUuid,
			@Parameter(name = "filesSign", description = "是否签署") String[] filesSign,
			@Parameter(name = "isSign", description = "是否签章1:签章   0：不签章", nullable = true) String[] isSign
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "修改提货合同信息-电子签章")
	public void updateWarehousePickupContract(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "contractNumber", description = "合同序列号") String contractNumber,
			@Parameter(name = "contractDate", description = "签订日期") String contractDate,
			@Parameter(name = "send", description = "发货方") String send,
			@Parameter(name = "recieve", description = "收货方") String recieve,
			@Parameter(name = "filesInfoId", description = "融资附件ID") Long[] filesInfoId,
			@Parameter(name = "filesUuid", description = "融资附件UUID") String[] filesUuid,
			@Parameter(name = "filesSign", description = "是否签署") String[] filesSign,
			@Parameter(name = "isSign", description = "是否签章1:签章   0：不签章", nullable = true) String[] isSign
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "合同提交")
	public void submitPickupContract(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "单个提货合同打回")
	public void callBackPickupContract(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "fileUuid", description = "融资附件UUID") String fileUuid,
			@Parameter(name = "remark", description = "备注", nullable = true) String remark
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "批量提货合同打回")
	public void callBackPickupContractAll(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "remark", description = "备注", nullable = true) String remark
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "合同替换-单个文件")
	public void replacePickupContract(
			@Parameter(name = "pickupId", description = "提货ID") Long pickupId,
			@Parameter(name = "oldFileUuid", description = "融资附件UUID") String oldFileUuid,
			@Parameter(name = "newFileUuid", description = "融资附件UUID") String newFileUuid,
			@Parameter(name = "remark", description = "备注", nullable = true) String remark
	);
	
	@Action(version = FinVersion1.class, description = "同步入库单数据")
	public void syncInboundData();
	
	@Permission
	@Action(version = FinVersion1.class, description = "查询开票信息列表")
	public PageList<EnterpriseInvoiceInfo> inquireEnterpriseInvoiceInfoPageList(
			@Parameter(name = "invoiceEnterpriseName", description = "企业名称", nullable = true) String invoiceEnterpriseName,
			@Parameter(name = "page", description = "分页参数") PageCriteria page
	);
	
	@Permission
	@Action(version = FinVersion1.class, description = "查询开票信息")
	public EnterpriseInvoiceInfo inquireEnterpriseInvoiceInfo(
			@Parameter(name = "invoiceEnterpriseName", description = "企业名称") String invoiceEnterpriseName
	);
	
	@Action(version = FinVersion1.class, description = "查询该融资是否完成提货")
	@Parameter(name = "inboundNos", description = "入库单号")
	public String inquireFinanceApplicationFinished(
			@Parameter(name = "finance_no", description = "融资编号") String finance_no
	);
	
	@Action(version = FinVersion1.class, description = "完成提货")
	public void finishWarehousePickupApplication(
			@Parameter(name = "pickupNumber", description = "提货编号") String pickupNumber
	);
}
